/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BL;

import BE.BEContrasenha;
import BE.BEEmpleado;
import BE.BEPerfil;
import BE.BEUsuario;
import DA.DAEmpleado;
import DA.DAUsuario;
import java.util.ArrayList;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Hunter
 */
public class BLUsuario {

    ArrayList<BEUsuario> lstUsuarios;
    DAUsuario dtaUsuario;
    BLEmpleado objGestorEmpleado;
    BLContrasenha objgestoBLContrasenha;
    BLPerfil objGestorPerfiles;
    
    public BLUsuario()
    {
        lstUsuarios = new ArrayList<BEUsuario>();
        dtaUsuario = new DAUsuario();
        objGestorEmpleado = new BLEmpleado();
        objgestoBLContrasenha = new BLContrasenha();
        objGestorPerfiles = new BLPerfil();
    }
    
    public void cargar()
    {
        lstUsuarios = dtaUsuario.obtenerUsuarios();
    }
    
    public BLModelo limpiarTabla(JTable tblDatosPerfiles) {
        
        BLModelo modelo = new BLModelo();
        tblDatosPerfiles.setModel(modelo);

        modelo.addColumn("Id Usuario");
        modelo.addColumn("Perfil");
        modelo.addColumn("Usuario");
        modelo.addColumn("Estado");
        
        return modelo;

    }
    
    public void llenarTabla(JTable tblDatosPerfiles) {
        
        BLModelo modelo = limpiarTabla(tblDatosPerfiles);
        objGestorPerfiles.cargar();
        
           
        //System.out.println(lstPerfiles.size());
        
        for(BEUsuario p:lstUsuarios)
        {
            Object [] fila = new Object[4];
            fila[0]= p.getIdUsuario();
            fila[1]= objGestorPerfiles.buscarIdPerfil(p.getIdPerfil()).getNombre();
            fila[2]=p.getUsuario();
            fila[3]= p.getEstado();
            modelo.addRow(fila);
                   
        }
    }

    public String guardar(BEEmpleado objEmpleado, BEPerfil bEPerfil, BEUsuario objUsuario, BEContrasenha objContrasenha) {
        
        //ingreso el usuario
        //System.out.println("El idPerfil es: "+objUsuario.getIdPerfil());
        int idUsuario = dtaUsuario.insertar(objUsuario);
       // System.out.println(idUsuario);
        if (idUsuario==-1) return "No se pudo actualizar el usuario";
        
        //ingreso el empleado con el idUsuario actualizado
        objEmpleado.setIdUsuario(idUsuario);
       // System.out.println(objEmpleado.getIdPersona());
        objGestorEmpleado.modificaUsuarioEmpleado(objEmpleado);
        
        
        
        //ingreso la contrasenha
        objContrasenha.setIdUsuario(idUsuario);
        String resultado = objgestoBLContrasenha.insertar(objContrasenha);
        
        
        
        return "Se guardo el perfil de manera correcta";
        
        
        
    }

    public boolean existeUsuario(String usuario) {
        return dtaUsuario.existeUsuario(usuario);
    }

    public BEUsuario buscarIdPerfil(String idUsuario) {
        
        int id=Integer.parseInt(idUsuario);
        
        for(BEUsuario u:lstUsuarios)
        {
            if (u.getIdUsuario()==id) return u;
        }
       
        return null;
    }

    public String actualizar(BEEmpleado objEmpleado, BEPerfil bEPerfil, BEUsuario objUsuario, BEContrasenha objContrasenha) {
        //ingreso el usuario
        //System.out.println("El idPerfil es: "+objUsuario.getIdPerfil());
        boolean actualizo=dtaUsuario.actualizar(objUsuario);
       // System.out.println(idUsuario);
        if (!actualizo) return "No se pudo actualizar el usuario";
                
        //ingreso la contrasenha
        
        String resultado = objgestoBLContrasenha.actualizar(objContrasenha);
        
        
        
        return "Se guardo el perfil de manera correcta";
    }

    public BEUsuario buscarUsuario(String Usuario) {
        
        for(BEUsuario u:lstUsuarios)
        {
            if (u.getUsuario().equals(Usuario)) return u;
        }
       
        return null;
    }

    public void actualizarEstadoAInactivo(BEUsuario aux) {
        dtaUsuario.actulizarEstadoAInactivo(aux);
    }
    
    public void actualizaEstadoAActivo(BEUsuario aux)
    {
        dtaUsuario.actulizarEstadoAActivo(aux);
    }
    
    public int obtenerIntentosFallidos(BEUsuario objUsuario)
    {
        return dtaUsuario.obtenerIntentosFallidos(objUsuario);
    }
    
    public void actualizarIntentosFallidos(BEUsuario objUsuario, int intentos)
    {
        dtaUsuario.actualizarIntentosFallidos(objUsuario,intentos);
    }

    public void llenarTabla(JTable tblDatosPerfiles, int idusuario, String usuario) {
        
        
        BLModelo modelo = limpiarTabla(tblDatosPerfiles);
        objGestorPerfiles.cargar();
        
           
        //System.out.println(lstPerfiles.size());
        
        for(BEUsuario p:lstUsuarios)
        {
            Object [] fila = new Object[4];
            fila[0]= p.getIdUsuario();
            fila[1]= objGestorPerfiles.buscarIdPerfil(p.getIdPerfil()).getNombre();
            fila[2]=p.getUsuario();
            fila[3]= p.getEstado();
            if (filtrar(idusuario,usuario,p)) modelo.addRow(fila);
                   
        }
        
    }

    private boolean filtrar(int id, String nombre, BEUsuario usuario) {
        
        if ((id==-1)&&(nombre.equals(""))) return true;
        if ((id==-1)&&(nombre.equals(usuario.getUsuario()))) return true;
        if ((id==usuario.getIdUsuario())||(nombre.equals(usuario.getUsuario()))) return true;
        
        return false;
    }

   

}
